from selenium import  webdriver
from selenium.webdriver.support.wait import WebDriverWait
import  time
from conftest import BASE_DIR
from tools.get_logger import GetLogger

log=GetLogger().get_logger()

class Base:
    #初始化
    def __init__(self,driver):
        self.driver =driver
        log.info("获取传递driver对象{}".format(driver))

    #查找元素
    def base_find_element(self,loc,timeout=15,poll=0.5):
        """
        查找元素方法
        :param loc:元素定位信息
        :param timeout:最长 查找时间
        :param poll:查找频率，默认0.5秒找一次元素
        :return:返回找到的元素
        """
        #log.info("查找{}元素,等待时间为{}妙，访问频率次/{}秒".format(loc,timeout,poll))
        #使用显示等待，查找元素
        return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll).until(lambda x:x.find_element(*loc))

    # 判断元素是否存在
    def base_element_is_exist(self, loc):
        """
         确定元素是否存在方法
        :param loc: 元素定位信息
        :return: 返回布尔值
        """
        log.info("查找元素{}".format(loc))
        try:
            self.base_find_element(loc, timeout=3)
            log.info("已找到元素{}".format(loc))
            return True  # 代表元素存在
        except Exception as e:
            log.error("未找到元素{},异常为：{}".format(loc, e))
            return False

    #点击元素
    def base_click(self,loc):
        """
        点击元素方法
        :param loc:
        :return:
        """
        if self.base_element_is_exist(loc):
            log.info("点击元素{}".format(loc))
            self.base_find_element(loc).click()

    # 元素清空
    def base_clear(self, loc):
        """
        元素清空
        :param loc:
        :return:
        """
        if self.base_element_is_exist(loc):
            log.info("清空元素{}".format(loc))
            self.base_find_element(loc).clear()  # 清空


    #元素输入内容方法
    def base_input(self,loc,text):
        """
        元素输入内容方法
        :param loc:元素定位信息
        :param text:要输入的内容
        :return:
        """
        self.base_clear(loc) #该方法中已有判断元素是否存在的条件
        log.info("元素{}已清空".format(loc))
        log.info("给元素{}输入{}".format(loc,text))
        self.base_find_element(loc).send_keys(text,)


    #获取指定元素的文本方法
    def base_get_text(self,loc):
        '''
        获取指定元素的文本内容方法
        :param location: 元素定位信息
        :return: 返回获取指定元素的文本信息
        '''
        if self.base_element_is_exist(loc):
            log.info("获取元素{}的文本内容为：{}".format(loc, self.base_find_element(loc).text))
            return self.base_find_element(loc).text

    #截图方法
    def base_get_image(self):
        """
        :param pagename:  传入页面对象模块名称
        :return:
        """
        # log.error("正在截图,记录异常信息，图片名为{}-{}.png".format(pagename,time.strftime("%Y_%M_%d %H_%M_%S")))
        screenshot_name=time.strftime("%Y_%M_%d %H_%M_%S")+".png"
        log.error("正在截图,记录异常信息，图片名为{}".format(screenshot_name))
        self.driver.get_screenshot_as_file(BASE_DIR+'/screenshots/{}'.format(screenshot_name))


    #切换frame目录
    def base_switch_to_frame(self,loc):
        """
        切换表单方法
        :param loc:
        :return:
        """
        if self.base_element_is_exist(loc):
            log.info("正在进行切换表单操作，切换到表单元素{}".format(loc))
            self.driver.switch_to.frame(self.base_find_element(loc))
            log.info("表单切换成功")

    def base_switch_to_default_content(self):
        '''
        切换到默认表单方法
        :return:
        '''
        log.info("正在切换到默认表单")
        self.driver.switch_to.default_content()
        log.info("表单切换成功")

#调试
# from tools.get_driver import GetDriver
# if __name__ == '__main__':
#     driver= GetDriver().get_driver() #实例化driver对象获取driver
#     base=Base(driver) #传入driver对象，实例化Base类
#     base.base_get_image() #调用截图方法

